<!DOCTYPE HTML>
<html>
<head>
<title>SetKeyDelay | AutoHotkey</title>
<meta name="description" content="The SetKeyDelay command sets the delay that will occur after each keystroke sent by the Send and ControlSend commands." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>SetKeyDelay</h1>

<p>设置每次 <a href="Send.htm">Send</a> 和 <a href="ControlSend.htm">ControlSend</a> 发送键击后自动的延时.</p>

<pre class="Syntax"><span class="func">SetKeyDelay</span> <span class="optional">, Delay, PressDuration, Play</span></pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>Delay</dt>
  <dd><p>毫秒表示的时间, 可以为<a href="../Variables.htm#Expressions">表达式</a>. 使用 -1 表示无延时, 而 0 表示最小延时(然而如果使用了 <em>Play</em> 参数, 则 0 和 -1 都表示无延时). 留空此参数来保持当前的 <em>Delay</em>.</p>
    <p>如果脚本中没有使用过 SetKeyDelay, 则对于传统的 SendEvent 模式默认 <em>Delay</em> 为 10. 对于 <a href="Send.htm#SendPlayDetail">SendPlay 模式</a>, 默认 <em>Delay</em> 为 -1. 对于这两种模式默认的 <em>按住时长</em>(下面的) 为 -1.</p></dd>

  <dt id="dur">PressDuration</dt>
  <dd><p>某些游戏和特殊的应用程序可能要求每次键击具有一定的按下时间; 即按下按键后, 持续一段时间, 然后才松开.</p>
      <p>使用 -1 表示无延时(默认), 而 0 表示最小延时(然而, 如果使用了 <em>Play </em>参数, 则 0 和 -1 都表示无延时). 注: 这里的延时指按住按键的持续时间, 上面的延时是两次键击之间的间隔时间. 省略此参数来保留当前的 <em>按住时长</em> 不变.</p>
    <p class="note"><strong>注意</strong>: <em>PressDuration</em> 同样会在支持其他按键发送的修饰键(<kbd>Ctrl</kbd>, <kbd>Alt</kbd>, <kbd>Shift</kbd> 和 <kbd>Win</kbd>) 状态改变后产生延时.</p>
    <p>此参数可以为<a href="../Variables.htm#Expressions">表达式</a>.</p></dd>

  <dt>Play <span class="ver">[v1.0.43+]</span></dt>
  <dd><p>单词 <em>Play</em> 会把上面的设置应用于 <a href="Send.htm#SendPlayDetail">SendPlay 模式</a>而不是传统的 SendEvent 模式. 如果脚本没有使用此参数, 则 SendPlay 模式的延时总是 -1/-1.</p></dd>

</dl>

<h2 id="Remarks">备注</h2>
    <p class="note"><strong>注意</strong>: SetKeyDelay 的设置不会影响 <a href="Send.htm#SendInputDetail">SendInput</a>; 在这种模式的键击之间没有延时. 当 <a href="SendMode.htm">SendMode Input</a> 生效时对于 <a href="Send.htm">Send</a> 同样如此.</p>
<p>在每次 <a href="Send.htm">Send</a> 或 <a href="ControlSend.htm">ControlSend</a> 发送键击后会自动进行短暂的延时. 这样做提高了脚本的可靠性, 因为窗口有时无法响应快速的键击流.</p>
<p>在延迟(睡眠) 期间, 使当前线程<a href="../misc/Threads.htm#Interrupt">不可中断</a>.</p>
<p>由于操作系统计时系统的精确度, 延时可能会被向上取整到最近的 10 或 15 的倍数. 例如, 在大部分 Windows XP 系统上介于 1 和 10(含边界) 的延时都相当于 10 或 15(可能也适用于 2k).</p>
<p>对于 Send/SendEvent 模式, 延时为 0 时实际内部会执行 Sleep(0), 这样会将脚本时间片的剩余部分分配给其他需要的进程. 如果没有进程需要, 那么 Sleep(0) 相当于完全没有延时. 与之相比, 延时为 -1 则从不休眠. 为了提高可靠性, 推荐使用 0 而不是 -1.</p>
<p>当延时设为 -1 时, 脚本的进程优先级会成为传统的 <a href="SendMode.htm">SendEvent 模式</a>中键击发送速度的重要因素. 要提升脚本的优先级, 请使用 <code><a href="Process.htm">Process</a>, Priority,, High</code>. 尽管这通常会使得键击发送的速度超过<a href="WinActivate.htm">活动窗口</a>的处理速度, 不过系统会自动对它们进行缓冲. 在 <a href="Send.htm">Send</a> 命令完成后, 被缓冲的键击会继续到达目标窗口(即使此窗口现在已经不是活动窗口). 这种情况一般是不要紧的, 因为任何后续发送给相同窗口的键击会排列在缓冲中的那些键击之后.</p>
<p>内置变量 <strong>A_KeyDelay</strong> 包含了 Send/SendEvent 模式的当前 <em>Delay</em> 设置. <span class="ver">[v1.1.23+]:</span> <strong>A_KeyDuration</strong> 包含了 <em>PressDuration</em> 的设置, 同时 <strong>A_KeyDelayPlay</strong> 和 <strong>A_KeyDurationPlay</strong> 包含了 <a href="Send.htm#SendPlayDetail">SendPlay</a> 的设置.</p>
<p>每个新运行的<a href="../misc/Threads.htm">线程</a>(例如 <a href="../Hotkeys.htm">热键</a>, <a href="Menu.htm">自定义菜单项</a>或<a href="SetTimer.htm">定时</a>子程序) 都会以此命令的默认设置开始. 通过在脚本的自动执行段(脚本的顶部) 使用此命令可以改变这个默认设置.</p>
<h2 id="Related">相关</h2>
<p><a href="Send.htm">Send</a>, <a href="ControlSend.htm">ControlSend</a>, <a href="SendMode.htm">SendMode</a>, <a href="SetMouseDelay.htm">SetMouseDelay</a>, <a href="SetControlDelay.htm">SetControlDelay</a>, <a href="SetWinDelay.htm">SetWinDelay</a>, <a href="SetBatchLines.htm">SetBatchLines</a>, <a href="Click.htm">Click</a></p>
<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 在通过 <a href="Send.htm">Send</a> 或 <a href="ControlSend.htm">ControlSend</a> 发送每一个按键后, 产生尽可能小的延迟.</p>
<pre>SetKeyDelay, 0</pre>
</div>

</body>
</html>